# -*- coding: utf-8 -*-
# @Time    : 2024/6/26 17:09
# @Author  : yujiahao
# @File    : 17_pandas_readfile.py
# @description:Python Pandas读取文件


'''

当使用 Pandas 做数据分析的时，需要读取事先准备好的数据集，这是做数据分析的第一步。Panda 提供了多种读取数据的方法：
    - read_csv() 用于读取文本文件

        CSV 又称逗号分隔值文件，是一种简单的文件格式，以特定的结构来排列表格数据。
        CSV 文件能够以纯文本形式存储表格数据，比如电子表格、数据库文件，并具有数据交换的通用格式。
        CSV 文件会在 Excel 文件中被打开，其行和列都定义了标准的数据格式。

        将 CSV 中的数据转换为 DataFrame 对象是非常便捷的。和一般文件读写不一样，它不需要你做打开文件、读取文件、关闭文件等操作。
        相反，只需要一行代码就可以完成上述所有步骤，并将数据存储在 DataFrame 中。

    - read_json() 用于读取 json 文件
    - read_sql_query() 读取 sql 语句的，

'''
import sqlite3
from urllib.parse import quote_plus

import pandas as pd
import psycopg2
import redshift_connector
from sqlalchemy import create_engine
from sqlalchemy.engine.url import URL


def pandas_read_sql_psycopg2(db_config, sql):
    # 连接到 MySQL 数据库
    # conn = mysql.connector.connect(db_config)
    # 创建连接
    # conn = psycopg2.connect(
    #     dbname=db_config['database'],
    #     user=db_config['username'],
    #     password=db_config['password'],
    #     host=db_config['host'],
    #     port=db_config['port']
    # )

    # 创建 Redshift 连接（用redshift_connector连接也可以）
    conn = redshift_connector.connect(
        user=db_config['username'],
        password=db_config['password'],
        host=db_config['host'],
        port=db_config['port'],
        database=db_config['database']
    )
    # 读取 SQL 查询结果到 DataFrame
    df = pd.read_sql_query(sql, conn)

    # 关闭数据库连接
    conn.close()

    # 显示 DataFrame
    print(df)


def main():
    csv_file_path = '../../../input/nba.csv'
    json_file_path = '../../../input/nba.json'

    # todo 1、读取CSV文件
    # print('读取CSV文件\n', pd.read_csv(csv_file_path).head(100))

    print('''\n-----------------------------------☆☆☆分割线☆☆☆----------------------------------------\n''')

    # todo 2、读取json文件
    # print('读取json文件\n', pd.read_json(json_file_path).head(100))

    print('''\n-----------------------------------☆☆☆分割线☆☆☆----------------------------------------\n''')

    # todo 3、SQL数据库读取

    '''如果想要从 SQL 数据库读取数据，首先应该使用 Python 和数据库建立连接，然后将查询语句传递给 read_sql_query() 方法'''

    db_config = {
        'username': 'testbigdata',
        'password': 'Xizhibigdata-1',
        'host': '127.0.0.1',
        'port': 54391,
        'database': 'bigdata'
    }
    sql = 'SELECT * FROM bigdata.ods.ods_user_app limit 100'

    # 使用psycopg2
    # pandas_read_sql_psycopg2(db_config, sql)


if __name__ == '__main__':
    main()
